package 纯字符串;

/**
 * @description:
 * @author: 小白白
 * @create: 2021-05-22
 **/

public class No647回文子串 {

    /**
     * 给定一个字符串，你的任务是计算这个字符串中有多少个回文子串。
     * 具有不同开始位置或结束位置的子串，即使是由相同的字符组成，也会被视作不同的子串。
     *
     * 示例 1：
     * 输入："abc"
     * 输出：3
     * 解释：三个回文子串: "a", "b", "c"
     * 示例 2：
     * 输入："aaa"
     * 输出：6
     * 解释：6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
     *
     * 提示：
     * 输入的字符串长度不会超过 1000 。
     */

    public int countSubstrings(String s) {

        int result=0;
        boolean[][] dp=new boolean[s.length()][s.length()];
        char[] arr = s.toCharArray();

        for (int i = s.length()-1; i >= 0; i--) {

            for (int j = i; j < s.length(); j++) {

                if(arr[i]==arr[j]&&(j-i<=1||dp[i+1][j-1])){
                    result++;
                    dp[i][j]=true;
                }

            }

        }

        return result;
    }

}
